package com.kingyun.gpsinspection.purificationservice.services.jsm.innerservice.impl.workcellinfo;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cqhilink.api.common.utils.UniqueUtil;
import com.cqhilink.api.common.utils.date.DateStyle;
import com.cqhilink.api.common.utils.date.DateUtil;
import com.kingyun.gpsinspection.purificationservice.common.enums.StatusEnum;
import com.kingyun.gpsinspection.purificationservice.dao.mapper.jsm.EntityDataSetMapper;
import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.*;
import com.kingyun.gpsinspection.purificationservice.facade.service.jsm.workcellinfo.JsmIEntityDataSetService;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 实体数据关联service类
 * Created by jiangjx on 2017/1/9.
 */

public class JsmEntityDataSetServiceImpl implements JsmIEntityDataSetService {

    @Autowired
    private EntityDataSetMapper entityDataSetMapper;


    /**
     * 加载列表文件
     * @param cellDataSet 分页公用类
     * @return
     */
    @Override
    public JSONObject loadEntityDateSetTable(CellDataSet cellDataSet) throws Exception {
        JSONObject jsonObject = new JSONObject();
        /* 进行分页查询分离 */
        List<EntityDataSet> dataSets = entityDataSetMapper.queryTableList(cellDataSet);
        jsonObject.put("rows", JSON.toJSON(dataSets));
        //返回结果
        return jsonObject;
    }

    /**
     * 保存操作单元关联的数据集
     *
     * @param entityDataSetVo
     * @return
     */
    @Override
    public Integer saveEntityDateSet(EntityDataSetVo entityDataSetVo,Employee employee) throws Exception {
        //装载数据集信息
        JSONArray array = JSONArray.parseArray(entityDataSetVo.getRowInfo());
        if (null != array && array.size() != 0) {
            DataSrc dataSrc = JSON.parseObject(array.get(0).toString(), DataSrc.class);
            entityDataSetVo.setDatasetId(dataSrc.getDatasetId());//set数据集ID
            entityDataSetVo.setDatasetName(dataSrc.getDatasetName());//set数据集名称
        }
        //装载人员信息
       // Employee employee = employeeService.getLoginEmployee();
        EntityDataSet entityDataSet = new EntityDataSet();
        BeanUtils.copyProperties(entityDataSet, entityDataSetVo);//将页面传递的值复制到po类中

        //判断是否有已启用的关联
        EntityDataSet temp_Infp = entityDataSetMapper.queryRowsByDatasetId(entityDataSet);//查询该数据集是否关联过
        if (null == temp_Infp) {//如果查询不到，直接新增
            //装载其他信息
            entityDataSet.setCreatorId(employee.getEmployeeId());//set创建人ID
            entityDataSet.setCreateEtime(DateUtil.DateToString(new Date(), DateStyle.YYYY_MM_DD_HH_MM));//set创建时间
            entityDataSet.setModifierId(employee.getEmployeeId());//set修改人ID
            entityDataSet.setModifyTime(DateUtil.DateToString(new Date(), DateStyle.YYYY_MM_DD_HH_MM));//set修改时间
            entityDataSet.setId(UniqueUtil.uuid());//set主键id
            entityDataSet.setStatus(StatusEnum.Status_0.code());//set该条数据状态:0为使用,为删除
            return entityDataSetMapper.insertSelective(entityDataSet);//执行新增操作
        } else {
            if (temp_Infp.getStatus() == 0) {//如果查询到且已启用则直接返回提示信息
                return 0;
            } else {//如果查询到了但是已经删除则修改为启用
                return this.updateStatusByIds(JSONObject.parseArray("['" + temp_Infp.getId() + "']").toString(), StatusEnum.Status_0.code(),employee);
            }
        }
    }

    /**
     * 根据ID修改数据关联记录为删除
     *
     * @param ids 主键id
     * @return
     */
    @Override
    public Integer delEntityDateSet(String ids,Employee employee) throws Exception {
        return this.updateStatusByIds(ids, StatusEnum.Status_1.code(),employee);//执行修改操作
    }

    /**
     * 根据id修改状态公用方法
     *
     * @param ids    主键id
     * @param status 数据状态:0为使用1为删除
     */
    private Integer updateStatusByIds(String ids, Short status,Employee employee) {
        JSONArray temp_ids = JSONObject.parseArray(ids);
       // Employee employee = employeeService.getLoginEmployee();//查询当前登录人
        /**装载条件*/
        Map map = new HashMap<>();
        map.put("modifyId", employee.getEmployeeId());//set修改人
        map.put("modifyTime", DateUtil.DateToString(new Date(), DateStyle.YYYY_MM_DD_HH_MM));//set修改时间
        map.put("status", status);//set该条数据状态，0为使用1为删除
        map.put("ids", temp_ids);//set主键ID
        return entityDataSetMapper.updateStatusByIds(map);//执行修改操作
    }
}
